package org.jsola.hr.provider;

import org.jsola.admin.vo.HeaderFieldsListVO;
import org.jsola.core.Page;
import org.jsola.hr.vo.JfStatisticsAnalyseVO;
import org.jsola.salary.dto.*;
import org.jsola.salary.entity.*;
import org.jsola.salary.query.ChannelFeeSettlementQuery;
import org.jsola.salary.vo.*;
import org.jsola.salary.vo.excel.ChannelFeeSettlementExportVO;
import org.jsola.user.core.TokenUser;

import java.util.List;

/**
 * @author zhenghua
 */
public interface ISalaryProviderService {

    /**
     * 渠道劳务费结算合计
     *
     * @param channelFeeSettlementQuery 查询条件
     * @param tokenUser                 当前用户User
     * @return 合计
     */
    List<ChannelFeeSettlementDO> feeSumByYearAndMonth(ChannelFeeSettlementQuery channelFeeSettlementQuery, TokenUser tokenUser);

    /**
     * 渠道劳务费结算导出
     *
     * @param channelFeeSettlementQuery 查询条件
     * @param tokenUser                 当前用户User
     * @return list
     */
    List<ChannelFeeSettlementExportVO> selectExportList(ChannelFeeSettlementQuery channelFeeSettlementQuery, TokenUser tokenUser);

    /**
     * 查询渠道劳务费结算
     *
     * @param channelFeeSettlementQuery 查询条件
     * @param tokenUser                 当前用户User
     * @return list
     */
    List<ChannelFeeSettlementVO> getChannelFeeSettlement(ChannelFeeSettlementQuery channelFeeSettlementQuery, TokenUser tokenUser);


    /**
     * 考勤工资导入月工资表
     *
     * @param companyId 用工单位ID
     * @param yearly    年
     * @param monthly   月
     * @param list      考勤工资记录LIst
     * @param tokenUser 当前用户User
     * @return 导入月工资表成功的员工数量
     */
    List<String> updateAttendancePay(Long salaryTemplateSalaryId, String companyId, Integer yearly, Integer monthly, List<AttendancePayImportVO> list, TokenUser tokenUser);

    /**
     * 考勤工资导入月工资表
     *
     * @param list      考勤工资记录LIst
     * @param tokenUser 当前用户User
     * @return 导入月工资表成功的员工数量
     */
    List<String> updateAttendancePay(Long salaryTemplateSalaryId, List<AttendancePayImportVO> list, TokenUser tokenUser);

    /**
     * 根据员工id查找定薪情况
     *
     * @param empIds 员工id列表
     * @return 员工定薪金额
     */
    List<EmpFixedSalaryDO> selectFixedSalaryByEmpIds(List<String> empIds);

    /**
     * 获取员工截止到指定月份的累计工时,包含指定月份
     *
     * @param empId     员工id
     * @param yearly    年份
     * @param monthly   月份
     * @param tokenUser 当前用户
     * @return 工时
     */
    float getWorkTime(String empId, Integer yearly, Integer monthly, TokenUser tokenUser);

    /**
     * 获取员工截止到指定月份上个月的累计工时,包含上个月 传入2021-3 查询截止到2021-2的数据,包含2月
     *
     * @param empId     员工id
     * @param yearly    年份
     * @param monthly   月份
     * @param tokenUser 当前用户
     * @return 工时
     */
    float getLastMonthWorkTime(String empId, Integer yearly, Integer monthly, TokenUser tokenUser);

    /**
     * 获批量取员工截止到指定月份的累计工时,包含指定月份
     *
     * @param empIdList 员工id
     * @param yearly    年份
     * @param monthly   月份
     * @return 工时
     */
    List<WorkTimeVO> getWorkTime(List<String> empIdList, Integer yearly, Integer monthly, TokenUser tokenUser);

    /**
     * 获批量取员工截止到指定月份上个月的累计工时,不包含指定月份
     *
     * @param empIdList 员工id
     * @param yearly    年份
     * @param monthly   月份
     * @return 工时
     */
    List<WorkTimeVO> getLastMonthWorkTime(List<String> empIdList, Integer yearly, Integer monthly, TokenUser tokenUser);

    /**
     * 根据月工资汇总表id查询模板月工资下的员工月工资
     *
     * @param monthSalaryId 月工资汇总表id
     * @return 员工月工资信息
     */
    List<EmployeeSalaryDO> selectByMonthSalaryId(Long monthSalaryId);

    /**
     * 根据月工资汇总表id查询模板月工资下的员工月工资
     *
     * @param monthSalaryIdList 月工资汇总表id
     * @return 员工月工资信息
     */
    List<EmployeeSalaryDO> selectByMonthSalaryIds(List<Long> monthSalaryIdList);

    /**
     * 根据月工资汇总表id查询模板表头
     *
     * @param monthSalaryId 月工资汇总表id
     * @param tokenUser     当前用户
     * @return 模板表头
     */
    List<SalaryTemplateItemVO> selectAllUsedVoByMonthSalaryId(Long monthSalaryId, TokenUser tokenUser);

    /**
     * 根据月工资汇总表id查询模板表头
     *
     * @param monthSalaryIdList 月工资汇总表id
     * @param tokenUser         当前用户
     * @return 模板表头
     */
    List<SalaryTemplateItemVO> selectAllUsedVoByMonthSalaryIds(List<Long> monthSalaryIdList, TokenUser tokenUser);


    /**
     * 查询公司Ids某月份的月工资汇总
     *
     * @param companyIds 公司id
     * @param yearly     年份
     * @param monthly    月份
     * @param tokenUser  当前用户
     * @return 公司某月份的月工资汇总
     */
    List<MonthlySalarySummaryVO> selectMonthlySalarySummaryByCompanyIds(List<String> companyIds, Integer yearly, Integer monthly, TokenUser tokenUser);

    /**
     * 查询公司Ids某月份的月工资汇总
     *
     * @param companyIds 公司id
     * @param yearly     年份
     * @param monthly    月份
     * @param tokenUser  当前用户
     * @return 公司某月份的月工资汇总
     */
    List<MonthlySalarySummaryNewVO> selectMonthlySalarySummaryByCompanyIdsNew(List<String> companyIds, Integer yearly, Integer monthly, TokenUser tokenUser);


    /**
     * 查询公司下指定月份员工月工资
     *
     * @param companyIds 公司Id
     * @param yearly     年份
     * @param monthly    月份
     * @param tokenUser  登录用户
     * @return 公司下指定月份员工月工资
     */
    @Deprecated
    List<EmployeeSalaryDO> selectByCompanyIdsAndMonthly(List<String> companyIds, Integer yearly, Integer monthly, TokenUser tokenUser);


    /**
     * 查询公司下指定月份员工月工资
     *
     * @param companyIds 公司Id
     * @param yearly     年份
     * @param monthly    月份
     * @param tokenUser  登录用户
     * @return 公司下指定月份员工月工资
     */
    List<EmployeeSalaryNewDO> selectNewByCompanyIdsAndMonthly(List<String> companyIds, Integer yearly, Integer monthly, TokenUser tokenUser);

    /**
     * 查找用工单位下指定月份员工金额
     *
     * @param companyIds 用工单位Id(为空返回空)
     * @param yearly     年
     * @param monthly    月
     * @param tokenUser  当前用户
     * @return 员工金额表集合
     */
    List<EmployeeAmountDO> selectAmountByCompanyIdsAndMonthly(List<String> companyIds, Integer yearly, Integer monthly, TokenUser tokenUser);


    /**
     * 查找公司下的工资条模板
     *
     * @param companyIds 公司Id
     * @param tokenUser  当前用户
     * @return 工资条模板
     */
    List<SalaryTemplateSalaryDO> selectTemplateByCompanyIds(Integer yearly, Integer monthly
            , List<String> companyIds, TokenUser tokenUser);


    /**
     * 查询模板表头
     *
     * @param salaryTemplateSalaryIds 模板月工资Ids
     * @param tokenUser               当前用户
     * @return 模板表头
     */
    List<SalaryTemplateItemVO> selectAllUsedVoBySalaryTemplateSalaryIds(List<Long> salaryTemplateSalaryIds, TokenUser tokenUser);


    /**
     * 统计数据
     *
     * @param employeeSalaryDOList 员工工资列表
     * @return 数据统计
     */
    SalaryGroupSalaryVO getSalaryGroupSalaryVO(List<EmployeeSalaryDO> employeeSalaryDOList);


    /**
     * 下发工资条模板到公司
     *
     * @param issuedSalaryTemplateAddDTO 工资条模板
     * @param tokenUser                  登录用户
     * @return 印章
     */
    List<SalaryTemplateVO> saveIssuedSeal(IssuedSalaryTemplateAddDTO issuedSalaryTemplateAddDTO, TokenUser tokenUser);

    /**
     * 删除员工定薪信息
     *
     * @param empId     员工id
     * @param tokenUser 当前用户
     * @return 删除数量
     */
    int deleteFixedInfoByEmpId(String empId, TokenUser tokenUser);

    /**
     * 删除员工定薪信息
     *
     * @param empIds    员工id
     * @param tokenUser 当前用户
     * @return 删除数量
     */
    int deleteFixedInfoByEmpIds(List<String> empIds, TokenUser tokenUser);

    /**
     * 根据员工id查询当前月份渠道劳务费结算
     *
     * @param empId     员工id
     * @param companyId 用工单位id
     * @param tokenUser 当前用户
     * @return 渠道劳务费结算列表
     */
    List<ChannelFeeSettlementDetailDO> selectByEmpIdAndDate(String empId, String companyId, TokenUser tokenUser);


    /**
     * 查询员工专项附加项详情
     *
     * @param empId     员工Id
     * @param tokenUser 当前用户
     * @return 专项附加项详情详情信息
     */
    List<SpecialAdditionalDetailDO> selectSpecialAdditionalDetailByEmpId(String empId, TokenUser tokenUser);


    /**
     * 根据员工个税累计
     *
     * @param empId     员工id
     * @param companyId 公司id
     * @param tokenUser 当前用户
     * @return 员工个税累计
     */
    List<EmpTaxGrandTotalDO> selectEmpTaxGrandTotalByEmpId(String empId, String companyId, TokenUser tokenUser);


    /**
     * 保存专项附加项详情  保存do全部数据 仅用于更换公司使用
     *
     * @param specialAdditionalDetailDO 专项附加项详情
     */
    void saveSpecialAdditionalDetail(SpecialAdditionalDetailDO specialAdditionalDetailDO);

    /**
     * 批量删除专项附加项详情，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser                  当前用户
     * @param specialAdditionalDetailIds 专项附加项表id
     * @return 删除数量
     */
    int deleteSpecialAdditionalDetailByIds(TokenUser tokenUser, Long... specialAdditionalDetailIds);


    /**
     * 保存员工个税累计  保存do全部数据 仅用于更换公司使用
     *
     * @param empTaxGrandTotalDO 员工个税累计
     */
    void saveEmpTaxGrandTotal(EmpTaxGrandTotalDO empTaxGrandTotalDO);

    /**
     * 批量删除员工个税累计表，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser           当前用户
     * @param empTaxGrandTotalIds 员工个税累计表id
     * @return 删除数量
     */
    int deleteEmpTaxGrandTotalByIds(TokenUser tokenUser, Long... empTaxGrandTotalIds);


    /**
     * 新增客户明细表
     *
     * @param customerDetailsAddDTO 新增客户明细表DTO
     * @param tokenUser             当前用户
     * @return 客户明细表详情信息
     */
    @Deprecated
    CustomerDetailsDO saveCustomerDetails(CustomerDetailsAddDTO customerDetailsAddDTO, TokenUser tokenUser);

    /**
     * 新增客户明细表
     *
     * @param customerDetailsNewAddDTO 新增客户明细表DTO
     * @param tokenUser                当前用户
     * @return 客户明细表详情信息
     */
    CustomerDetailsNewDO saveNewCustomerDetails(CustomerDetailsNewAddDTO customerDetailsNewAddDTO, TokenUser tokenUser);


    /**
     * 新增客户明细表
     *
     * @param customerDetailsUpdateDTO 修改客户明细表DTO
     * @param tokenUser                当前用户
     * @return 客户明细表详情信息
     */
    @Deprecated
    int updateCustomerDetails(CustomerDetailsUpdateDTO customerDetailsUpdateDTO, TokenUser tokenUser);

    /**
     * 新增客户明细表
     *
     * @param customerDetailsNewUpdateDTO 修改客户明细表DTO
     * @param tokenUser                   当前用户
     * @return 客户明细表详情信息
     */
    int updateNewCustomerDetails(CustomerDetailsNewUpdateDTO customerDetailsNewUpdateDTO, TokenUser tokenUser);

    /**
     * 批量新增员工明细表
     *
     * @param employeeDetailsAddDTOList 新增员工明细表DTO
     * @param tokenUser                 当前用户
     * @return 员工明细表详情信息
     */
    @Deprecated
    List<EmployeeDetailsDO> batchSaveEmployeeDetails(List<EmployeeDetailsAddDTO> employeeDetailsAddDTOList, TokenUser tokenUser);

    /**
     * 批量新增员工明细表
     *
     * @param employeeDetailsNewAddDTOList 新增员工明细表DTO
     * @param tokenUser                    当前用户
     * @return 员工明细表详情信息
     */
    List<EmployeeDetailsNewDO> batchSaveNewEmployeeDetails(List<EmployeeDetailsNewAddDTO> employeeDetailsNewAddDTOList, TokenUser tokenUser);

    /**
     * 批量新增明细(客户明细/员工明细)金额表
     *
     * @param detailsAmountAddDTOList 新增明细(客户明细/员工明细)金额表DTO
     * @param tokenUser               当前用户
     * @return 明细(客户明细 / 员工明细)金额表详情信息
     */
    List<DetailsAmountDO> batchSaveNewDetailsAmount(List<DetailsAmountAddDTO> detailsAmountAddDTOList, TokenUser tokenUser);

    /**
     * 查询用工单位指定年月创建的客户明细
     *
     * @param yearly    工资年份
     * @param monthly   工资月份
     * @param companyId 用工单位Id
     * @param tokenUser 当前用户
     * @return 用工单位指定年月创建的客户明细
     */
    List<CustomerDetailsDO> selectCustomerDetailsByMonthlyAndCompanyId(Integer yearly, Integer monthly, String companyId, TokenUser tokenUser);

    /**
     * 查询用工单位指定年月指定类型创建的客户明细
     *
     * @param yearly    工资年份
     * @param monthly   工资月份
     * @param companyId 用工单位Id
     * @param tokenUser 当前用户
     * @return 用工单位指定年月创建的客户明细
     */

    @Deprecated
    List<CustomerDetailsDO> selectCustomerDetailsByMonthlyCompanyIdAndType(Integer yearly, Integer monthly
            , String companyId, String type, TokenUser tokenUser);

    /**
     * 查询用工单位指定年月指定类型创建的客户明细
     *
     * @param yearly     工资年份
     * @param monthly    工资月份
     * @param companyIds 用工单位Id
     * @param tokenUser  当前用户
     * @return 用工单位指定年月创建的客户明细
     */
    List<CustomerDetailsNewDO> selectNewCustomerDetailsByMonthlyCompanyIdAndType(Integer yearly, Integer monthly
            , String type, List<String> companyIds, TokenUser tokenUser);

    /**
     * 根据类型、用工单位Ids查询客户明细表
     *
     * @param yearly     年
     * @param monthly    月
     * @param type       类型
     * @param companyIds 用工单位Ids
     * @param tokenUser  当前用户
     * @return 客户明细表集合
     */
    @Deprecated
    List<CustomerDetailsDO> selectCustomerDetailsByTypeAndCompanyIds(Integer yearly, Integer monthly
            , String type, List<String> companyIds, TokenUser tokenUser);

    /**
     * 根据类型、用工单位Ids查询客户明细表 附带员工的明细
     *
     * @param yearly     年
     * @param monthly    月
     * @param type       类型
     * @param companyIds 用工单位Ids
     * @param tokenUser  当前用户
     * @return 客户明细表集合
     */
    @Deprecated
    List<CustomerDetailsVO> selectCustomerDetailsVoByTypeAndCompanyIds(Integer yearly, Integer monthly
            , String type, List<String> companyIds, TokenUser tokenUser);

    /**
     * 根据类型、用工单位Ids查询客户明细表 附带员工的明细
     *
     * @param yearly     年
     * @param monthly    月
     * @param type       类型
     * @param companyIds 用工单位Ids
     * @param tokenUser  当前用户
     * @return 客户明细表集合
     */
    List<CustomerDetailsNewVO> selectVoAndAmountByTypeAndCompanyIds(Integer yearly, Integer monthly
            , String type, List<String> companyIds, TokenUser tokenUser);

    /**
     * 根据类型、用工单位Ids查询客户明细表 附带员工的明细
     *
     * @param yearly     年
     * @param monthly    月
     * @param type       类型
     * @param companyIds 用工单位Ids
     * @param pageNo
     * @param pageSize
     * @param tokenUser  当前用户
     * @return 客户明细表集合
     */
    Page<CustomerDetailsNewVO> selectPageAndAmountByTypeAndCompanyIds(Integer yearly, Integer monthly
            , String type, List<String> companyIds, Integer pageNo, Integer pageSize, TokenUser tokenUser);


    /**
     * 根据客户明细表id、员工Id查找员工明细表
     *
     * @param customerDetailsIdList 客户明细Ids
     * @param tokenUser             当前用户
     * @return 员工明细表集合
     */
    @Deprecated
    List<EmployeeDetailsDO> selectEmployeeDetailsByCustomerDetailsIdList(List<Long> customerDetailsIdList, TokenUser tokenUser);

    /**
     * 根据客户明细表id、员工Id查找员工明细表
     *
     * @param customerDetailsIdList 客户明细Ids
     * @param tokenUser             当前用户
     * @return 员工明细表集合
     */
    List<EmployeeDetailsNewDO> selectNewEmployeeDetailsByCustomerDetailsIdList(List<Long> customerDetailsIdList, TokenUser tokenUser);

    /**
     * 根据客户明细表id查找
     *
     * @param customerDetailsId 客户明细表id
     * @param tokenUser         当前用户
     * @return 客户明细表
     */
    @Deprecated
    CustomerDetailsDO selectCustomerDetailsById(Long customerDetailsId, TokenUser tokenUser);

    /**
     * 根据客户明细表id查找
     *
     * @param customerDetailsNewId 客户明细表id
     * @param tokenUser            当前用户
     * @return 客户明细表
     */
    CustomerDetailsNewDO selectCustomerDetailsNewById(Long customerDetailsNewId, TokenUser tokenUser);

    /**
     * 根据客户明细表id查找
     *
     * @param customerDetailsIdList 客户明细表ids
     * @param tokenUser             当前用户
     * @return 客户明细表
     */
    @Deprecated
    List<CustomerDetailsDO> selectCustomerDetailsByIds(List<Long> customerDetailsIdList, TokenUser tokenUser);

    /**
     * 根据客户明细表id查找
     *
     * @param customerDetailsNewIdList 客户明细表ids
     * @param tokenUser                当前用户
     * @return 客户明细表
     */
    List<CustomerDetailsNewDO> selectCustomerDetailsNewByIds(List<Long> customerDetailsNewIdList, TokenUser tokenUser);

    /**
     * 批量删除客户明细表，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser          当前用户
     * @param customerDetailsIds 客户明细表id
     * @return 删除数量
     */
    @Deprecated
    int deleteCustomerDetailsByIds(TokenUser tokenUser, Long... customerDetailsIds);

    /**
     * 批量删除客户明细表，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser          当前用户
     * @param customerDetailsIds 客户明细表id
     * @return 删除数量
     */
    int deleteNewCustomerDetailsByIds(TokenUser tokenUser, Long... customerDetailsIds);

    /**
     * 批量删除员工明细表，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser          当前用户
     * @param employeeDetailsIds 员工明细表id
     * @return 删除数量
     */
    @Deprecated
    int deleteEmployeeDetailsByIds(TokenUser tokenUser, Long... employeeDetailsIds);

    /**
     * 批量删除员工明细表，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser          当前用户
     * @param employeeDetailsIds 员工明细表id
     * @return 删除数量
     */
    int deleteNewEmployeeDetailsByIds(TokenUser tokenUser, Long... employeeDetailsIds);

    /**
     * 查询创建的最后一个月客户明细
     *
     * @param companyIds 用工单位Ids
     * @param tokenUser  当前用户
     * @return 公司创建的最后一个月汇总
     */
    @Deprecated
    CustomerDetailsDO selectCustomerDetailsLastOne(List<String> companyIds, TokenUser tokenUser);

    /**
     * 查询创建的最后一个月客户明细
     *
     * @param companyIds 用工单位Ids
     * @param tokenUser  当前用户
     * @return 公司创建的最后一个月汇总
     */
    CustomerDetailsNewDO selectNewCustomerDetailsLastOne(List<String> companyIds, TokenUser tokenUser);

    /**
     * 批量新增客户结算表
     *
     * @param customerSettlementAddDTOList 新增客户结算表DTO
     * @param tokenUser                    当前用户
     * @return 客户结算表详情信息
     */
    List<CustomerSettlementDO> batchSaveCustomerSettlement(List<CustomerSettlementAddDTO> customerSettlementAddDTOList
            , TokenUser tokenUser);


    /**
     * 删除指定员工未归档的月工资
     *
     * @param empIds    薪资组Id
     * @param tokenUser 当前用户
     * @return 删除条数
     */
    int deleteEmployeeSalaryNotArchiveByEmpIds(List<String> empIds, TokenUser tokenUser);


    /**
     * 查询公司下所有薪资组
     *
     * @param companyId 公司Id
     * @return 公司下所有薪资组
     */
    List<SalaryGroupVO> selectSalaryGroupByCompanyId(String companyId);

    /**
     * 查询公司下所有薪资组
     *
     * @param companyIds 公司Id
     * @return 公司下所有薪资组
     */
    List<SalaryGroupDO> selectSalaryGroupByCompanyIds(List<String> companyIds);

    /**
     * 查询该月指定的薪资组哪些已经创建月工资
     *
     * @param yearly    年份
     * @param monthly   月份
     * @param companyId 用工单位Id
     * @return 该月指定的薪资组哪些已经创建月工资
     */
    List<SalaryGroupSalaryDO> selectCreatedSalaryGroupSalary(Integer yearly, Integer monthly, String companyId);

    /**
     * 查询该月用工单位下已经创建月工资
     *
     * @param yearly     年份
     * @param monthly    月份
     * @param companyIds 用工单位Id
     * @return 该月用工单位下已经创建月工资
     */
    List<SalaryGroupSalaryDO> selectCreatedSalaryGroupByCompanyIds(Integer yearly, Integer monthly, List<String> companyIds);


    /**
     * 查询模板月工资选择的全部表头 取用header_list_string字段
     *
     * @param companyId  公司Id
     * @param moduleCode 模块;template:模板,monthly汇总,customer客户明细表
     * @param sourceId   模板月工资Id/汇总Id
     * @param tokenUser  当前用户
     * @return 模板月工资全部表头
     */
    List<HeaderFieldsListVO> selectAllHeaderDetailNew(String companyId, String moduleCode, Long sourceId, TokenUser tokenUser);


    /**
     * 根据类型和Ids查询明细(客户明细/员工明细)金额表
     *
     * @param sourceType 查询条件
     * @param sourceIds  查询条件
     * @param tokenUser  当前用户
     * @return 明细(客户明细 / 员工明细)金额表集合
     */
    List<DetailsAmountDO> selectDetailsAmountByTypeAndIds(String sourceType, List<Long> sourceIds, TokenUser tokenUser);


    /**
     * 查询员工的指定模板项的金额
     *
     * @param employeeSalaryNewIds 员工月工资Id
     * @param tokenUser            当前用户
     * @return 模板项的金额
     */
    List<EmployeeAmountDO> selectAmountByEmpSalaryNewIds(List<Long> employeeSalaryNewIds, TokenUser tokenUser);


    /**
     * 统计分析
     *
     * @param companyId 用工单位Id
     * @param yearly    年
     * @param tokenUser 登录用户
     */
    JfStatisticsAnalyseListVO jfStatisticsAnalyseLaborCosts(String companyId, Integer yearly, TokenUser tokenUser);

    /**
     * 根据服务费表id查找
     *
     * @param serviceChargeIdList id集合
     * @param tokenUser           当前用户
     * @return 服务费表集合
     */
    List<ServiceChargeDO> selectServiceChargeByIds(List<Long> serviceChargeIdList, TokenUser tokenUser);

    /**
     * 批量新增新客户明细服务费表
     *
     * @param customerDetailsNewServiceChargeAddDTOList 新增新客户明细服务费表DTO
     * @param tokenUser                                 当前用户
     * @return 新客户明细服务费表详情信息
     */
    List<CustomerDetailsNewServiceChargeDO> batchSaveCustomerDetailsNewServiceCharge(
            List<CustomerDetailsNewServiceChargeAddDTO> customerDetailsNewServiceChargeAddDTOList, TokenUser tokenUser);


    /**
     * 根据客户明细表ids查询明细服务费
     *
     * @param customerDetailsNewIds 客户明细表ids
     * @param tokenUser             当前用户
     * @return 新客户明细服务费表集合
     */
    List<CustomerDetailsNewServiceChargeDO> selectCustomerDetailsNewServiceChargeByCustomerDetailsNewIds(
            List<Long> customerDetailsNewIds, TokenUser tokenUser);

}
